// 定义类
class Book {
	// 定义属性一定要表明类型
	static color:string;
	// 定义静态属性
	num:number = 100;
	title: string;
	abc:string;
	// say: any;
	// 类有构造函数,构造函数不能指明返回值的类型
	constructor(title:string) {
		// 为属性赋值
		this.title = title;	
		this.abc;
		// this.say = function say():void {}
	}
	// 类可以定义方法
	getTitle():string {
		return this.title
	}
	// 定义静态方法
	static sayHello():string {
		return 'hello';
	}
}


// 定义几个jsBook子类，继承book类
class JsBook extends Book {
	// 在子类中定义的属性会覆盖父类的属性
	num:number = 200;
	// 定义属性
	price:number;
	// 定义构造函数
	constructor(title:string, price:number) {
		// 要通过super关键字继承父类
		// super一定要写在最前面，先继承，在覆盖
		super(title)
		this.price = price;
		// super(title)
	}
	// 在子类中覆盖父类的方法
	getTitle():string {
		return 'success'
	}
	// 子类中定义其他的方法
	getColor():string {
		return 'red'
	}
}

// 实例化子类
var jsBook:JsBook = new JsBook('abc', 1000);
console.log(jsBook)
// 获取数名称
console.log(jsBook.getTitle())


// d是子类， b是父类，
// var __extends = this.__extends || function (d, b) {
//     for (var p in b) 
//     	if (b.hasOwnProperty(p)) 
//     		d[p] = b[p];
//     function __() { this.constructor = d; }
//     __.prototype = b.prototype;
//     d.prototype = new __();
// };